package simple.runtime;

import simple.runtime.annotations.SimpleFunction;
import simple.runtime.annotations.SimpleObject;

/**
 * 编码相关函数。
 * 
 * @author 东子 xhwsd@qq.com
 */
@SimpleObject
public final class 编码 {

  @SimpleFunction
  public static String UCS2解析(String theString) {
    int len = theString.length();
    StringBuffer outBuffer = new StringBuffer(len);
    for (int x = 0; x < len;) {
      char aChar = theString.charAt(x++);
      if (aChar == '\\') {
        aChar = theString.charAt(x++);
        if (aChar == 'u') {
          int value = 0;
          for (int i = 0; i < 4; i++) {
            aChar = theString.charAt(x++);
            switch (aChar) {
              case '0': 
              case '1': 
              case '2': 
              case '3': 
              case '4': 
              case '5': 
              case '6': 
              case '7': 
              case '8': 
              case '9': 
                value = (value << 4) + aChar - 48;
                break;
              case 'a': 
              case 'b': 
              case 'c': 
              case 'd': 
              case 'e': 
              case 'f': 
                value = (value << 4) + 10 + aChar - 97;
                break;
              case 'A': 
              case 'B': 
              case 'C': 
              case 'D': 
              case 'E': 
              case 'F': 
                value = (value << 4) + 10 + aChar - 65;
                break;
              case ':': 
              case ';': 
              case '<': 
              case '=': 
              case '>': 
              case '?': 
              case '@': 
              case 'G': 
              case 'H': 
              case 'I': 
              case 'J': 
              case 'K': 
              case 'L': 
              case 'M': 
              case 'N': 
              case 'O': 
              case 'P': 
              case 'Q': 
              case 'R': 
              case 'S': 
              case 'T': 
              case 'U': 
              case 'V': 
              case 'W': 
              case 'X': 
              case 'Y': 
              case 'Z': 
              case '[': 
              case '\\': 
              case ']': 
              case '^': 
              case '_': 
              case '`': 
              default: 
                throw new IllegalArgumentException("Malformed   \\uxxxx   encoding.");
            }
          }
          outBuffer.append((char) value);
        } else {
          if (aChar == 't') {
            aChar = '\t';
          } else if (aChar == 'r') {
            aChar = '\r';
          } else if (aChar == 'n') {
            aChar = '\n';
          } else if (aChar == 'f') {
            aChar = '\f';
          }
          outBuffer.append(aChar);
        }
      } else {
        outBuffer.append(aChar);
      }
    }
    return outBuffer.toString();
  }
  
  @SimpleFunction
  public static String UCS2编码(String dataStr) {
    String str = "";
    for (int i = 0; i < dataStr.length(); i++) {
      String temp = Integer.toHexString(dataStr.charAt(i) & 0xFFFF);
      if (temp.length() == 2) {
        temp = "00" + temp;
      }
      str = str + "\\u" + temp;
    }
    return str;
  }
}
